package db

import (
	"time"
)

type DbUser struct {
	Id      int64      `gorm:"column:id"`
	Name    string     `gorm:"column:name"`
	Gold    int64      `gorm:"column:gold"`
	Gem     int32      `gorm:"column:gem"`
	Level   int16      `gorm:"column:level"`
	Exp     int32      `gorm:"column:exp"`
	Server  int16      `gorm:"column:server"`
	Created *time.Time `gorm:"column:created;->;<-:create"`
	Updated *time.Time `gorm:"column:updated"`
}

func (user *DbUser) TableName() string {
	return "user"
}

func (user *DbUser) GetByModel() error {
	result := Conn.Model(user).First(&user)
	if result.Error != nil {
		return result.Error
	}
	return nil
}

func (user *DbUser) UpdateServer(id int16) {
	user_fields := make(map[string]interface{}, 1)
	user_fields["server"] = id
	if Conn.Model(user).Updates(user_fields).Error != nil {
		return
	}
}

type DbRole struct {
	Id                 int32  `gorm:"column:id"`                   // 角色id
	Uid                int64  `gorm:"column:uid"`                  // uid
	Level              int16  `gorm:"column:level"`                // 等级
	Exp                int32  `gorm:"column:exp"`                  // 经验
	Promote            int8   `gorm:"column:promote"`              // 等阶
	Star               int8   `gorm:"column:star"`                 // 星级
	UnlockTalent       string `gorm:"column:unlock_talent"`        // 已解锁天赋列表
	CurrEnergy         int32  `gorm:"column:curr_energy"`          // 当前怒气值
	CurrHp             int32  `gorm:"column:curr_hp"`              // 当前生命值
	UnlockCaptainSkill string `gorm:"column:unlock_captain_skill"` // 已解锁队长技能列表
}

func (r *DbRole) TableName() string {
	return "user_role"
}

type DbItem struct {
	Id      int32      `gorm:"column:id"`
	Uid     int64      `gorm:"column:uid"`
	Cell    int16      `gorm:"column:cell"`
	Type    int8       `gorm:"column:type"`
	Num     int32      `gorm:"column:num"`
	Day     int8       `gorm:"column:day"`
	CdTime  *time.Time `gorm:"column:cd_time"`
	EndTime *time.Time `gorm:"column:end_time"`
}

func (i *DbItem) TableName() string {
	return "user_item"
}

const (
	EquipTypeNormal = 0
	EquipTypeJewel  = 1
)

type DbEquip struct {
	Id         int32 `gorm:"column:id"`
	Uid        int64 `gorm:"column:uid"`
	Cell       int16 `gorm:"column:cell"`
	Type       int16 `gorm:"column:type"`
	Level      int16 `gorm:"column:level"`
	Exp        int32 `gorm:"column:exp"`
	LevelGroup int32 `gorm:"column:level_group"`
	// AffixList       string `gorm:"column:affix_list"`
	// AffixRemakeList string `gorm:"column:affix_remake_list"`
	RoleId    int32  `gorm:"column:role_id"`
	JewelList string `gorm:"column:jewel_list"`
	SkillList string `gorm:"column:skill_list"`
}

func (e *DbEquip) TableName() string {
	return "user_equip"
}

type DbTeam struct {
	Id             int32  `gorm:"column:id"`               // 队伍id
	Uid            int64  `gorm:"column:uid"`              // uid
	Name           string `gorm:"column:name"`             // 队伍名称
	FightRoleList  string `gorm:"column:fight_role_list"`  // 战斗角色列表
	AssistRoleList string `gorm:"column:assist_role_list"` // 支援角色列表
}

func (t *DbTeam) TableName() string {
	return "user_team"
}

type DbMail struct {
	Id              int32  `gorm:"column:id"`                // 邮件id
	Uid             int64  `gorm:"column:uid"`               // uid
	Title           string `gorm:"column:title"`             // 邮件标题
	Content         string `gorm:"column:content"`           // 邮件内容
	Sender          string `gorm:"column:sender"`            // 邮件发送者
	SendTime        uint32 `gorm:"column:send_time"`         // 邮件发送时间戳 秒
	ExpireTime      uint32 `gorm:"column:expire_time"`       // 邮件过期时间戳 秒
	IsRead          bool   `gorm:"column:is_read"`           // 是否已读
	IsAttachmentGot bool   `gorm:"column:is_attachment_got"` // 是否已领取附件
	IsImportance    bool   `gorm:"column:is_importance"`     // 是否重要邮件
	ItemList        string `gorm:"column:item_list"`         // 道具列表
}

func (m *DbMail) TableName() string {
	return "user_mail"
}

type DbUserData struct {
	Uid      int64  `gorm:"column:uid"`       // uid
	NickName string `gorm:"column:nick_name"` // 昵称

	SceneData    string `gorm:"column:scene_data"`    // 场景数据
	QuestData    string `gorm:"column:quest_data"`    // 任务数据
	ShopData     string `gorm:"column:shop_data"`     // 商店数据
	GachaData    string `gorm:"column:gacha_data"`    // 抽卡数据
	CodexData    string `gorm:"column:codex_data"`    // 图鉴数据
	WeaponData   string `gorm:"column:weapon_data"`   // 武器数据
	HomeData     string `gorm:"column:home_data"`     // 家园数据
	ActivityData string `gorm:"column:activity_data"` // 活动数据

	SceneId        int32  `gorm:"column:scene_id"`         // 当前场景id
	TeamId         int32  `gorm:"column:team_id"`          // 当前队伍id
	ClientData     string `gorm:"column:client_data"`      // 客户端存档数据
	CurrMailId     int32  `gorm:"column:curr_mail_id"`     // 当前邮件id
	GlobalMailId   uint64 `gorm:"column:global_mail_id"`   // 已领取的最大全服邮件id
	TimerMailId    uint64 `gorm:"column:timer_mail_id"`    // 已领取的最大定时邮件id
	TowerArea      int32  `gorm:"column:tower_area"`       // 当前爬塔区域
	TowerLevel     int32  `gorm:"column:tower_level"`      // 当前爬塔关卡
	TowerPassArea  int32  `gorm:"column:tower_pass_area"`  // 通关爬塔区域
	TowerPassLevel int32  `gorm:"column:tower_pass_level"` // 通关爬塔关卡
	TowerPassTime  int64  `gorm:"column:tower_pass_time"`  // 爬塔通关时间
}

func (d *DbUserData) TableName() string {
	return "user_data"
}

type DbScene struct {
	Id            int32  `gorm:"column:id"`
	Uid           int64  `gorm:"column:uid"`
	Tag           int32  `gorm:"column:tag"`
	NpcList       string `gorm:"column:npc_list"`
	MonsterList   string `gorm:"column:monster_list"`
	GadgetList    string `gorm:"column:gadget_list"`
	CurrCollCount int32  `gorm:"column:curr_coll_count"`
}

func (d *DbScene) TableName() string { return "user_scene" }

type DbUserHomeBuilding struct {
	BuildingUuid int64   `gorm:"building_uuid,omitempty"`
	BuildingId   int32   `gorm:"building_id,omitempty"`
	Uid          int64   `gorm:"uid,omitempty"`
	PosX         float32 `gorm:"pos_x,omitempty"`
	PosY         float32 `gorm:"pos_y,omitempty"`
	PosZ         float32 `gorm:"pos_z,omitempty"`
	Level        int8    `gorm:"level,omitempty"`
	Farm         string  `gorm:"farm,omitempty"`
	Factory      string  `gorm:"factory,omitempty"`
}

func (d *DbUserHomeBuilding) TableName() string { return "user_home_building" }

type DbUserHome struct {
	Id             int32  `gorm:"column:id"`
	Uid            int64  `gorm:"column:uid"`
	UnlockBuilding string `gorm:"column:unlock_building"`
	Level          int8   `gorm:"column:level"`
	Exp            int32  `gorm:"column:exp"`
}

func (d *DbUserHome) TableName() string { return "user_home" }
